1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.collect;
18
19 import com.google.common.annotations.GwtCompatible;
20 import com.google.common.annotations.GwtIncompatible;
21
22 import java.io.Serializable;
23 import java.util.Map.Entry;
24
25 import javax.annotation.Nullable;
26
27
28
29
30
31
32
33 @GwtCompatible(emulated = true)
34 final class ImmutableMapKeySet<K, V> extends ImmutableSet<K> {
35 private final ImmutableMap<K, V> map;
36
37 ImmutableMapKeySet(ImmutableMap<K, V> map) {
38 this.map = map;
39 }
40
41 @Override
42 public int size() {
43 return map.size();
44 }
45
46 @Override
47 public UnmodifiableIterator<K> iterator() {
48 return asList().iterator();
49 }
50
51 @Override
52 public boolean contains(@Nullable Object object) {
53 return map.containsKey(object);
54 }
55
56 @Override
57 ImmutableList<K> createAsList() {
58 final ImmutableList<Entry<K, V>> entryList = map.entrySet().asList();
59 return new ImmutableAsList<K>() {
60
61 @Override
62 public K get(int index) {
63 return entryList.get(index).getKey();
64 }
65
66 @Override
67 ImmutableCollection<K> delegateCollection() {
68 return ImmutableMapKeySet.this;
69 }
70
71 };
72 }
73
74 @Override
75 boolean isPartialView() {
76 return true;
77 }
78
79 @GwtIncompatible("serialization")
80 @Override Object writeReplace() {
81 return new KeySetSerializedForm<K>(map);
82 }
83
84 @GwtIncompatible("serialization")
85 private static class KeySetSerializedForm<K> implements Serializable {
86 final ImmutableMap<K, ?> map;
87 KeySetSerializedForm(ImmutableMap<K, ?> map) {
88 this.map = map;
89 }
90 Object readResolve() {
91 return map.keySet();
92 }
93 private static final long serialVersionUID = 0;
94 }
95 }